/*
 *
 *  * | Licensed 未经许可不能去掉「OPENIITA」相关版权
 *  * +----------------------------------------------------------------------
 *  * | Author: xw2sy@163.com
 *  * +----------------------------------------------------------------------
 *
 *  Copyright [2024] [OPENIITA]
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * /
 */

package cc.iotkit.data.service.miniAdmin;

import cc.iotkit.data.dao.DeviceDistributorDetailRepository;
import cc.iotkit.data.dao.DeviceDistributorRepository;
import cc.iotkit.data.dao.DeviceInfoRepository;
import cc.iotkit.data.dao.IJPACommData;
import cc.iotkit.data.miniAdmin.IDeviceDistributorDetailData;
import cc.iotkit.data.model.*;
import cc.iotkit.data.util.PredicateBuilder;
import cc.iotkit.model.miniAdmin.*;
import cn.hutool.core.bean.BeanUtil;
import com.querydsl.core.QueryResults;
import com.querydsl.core.types.Predicate;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

import static cc.iotkit.data.model.QTbDeviceDistributorDetail.tbDeviceDistributorDetail;

/**
 * @Author：tfd
 * @Date：2023/5/31 9:45
 */
@Primary
@Service
@RequiredArgsConstructor
public class DeviceDistributorDetailDataImpl
        implements IDeviceDistributorDetailData, IJPACommData<DeviceDistributorDetail, Long> {

    private final DeviceDistributorRepository  deviceDistributorRepository;

    private final DeviceDistributorDetailRepository deviceDistributorDetailRepository;

    private final DeviceInfoRepository deviceInfoRepository;

    private final JPAQueryFactory jpaQueryFactory;

    @Override
    public JpaRepository getBaseRepository() {
        return deviceDistributorRepository;
    }

    @Override
    public Class getJpaRepositoryClass() {
        return TbDeviceDistributorDetail.class;
    }

    @Override
    public Class getTClass() {
        return DeviceDistributorDetail.class;
    }


    @Override
    public List<DeviceDistributorChannelDTO> getList(Long bindId) {
        Predicate predicate =  PredicateBuilder.instance()
                .and(tbDeviceDistributorDetail.bindId.eq(bindId))
                .build();

        QueryResults<TbDeviceDistributorDetail> queryResults =    jpaQueryFactory.select(tbDeviceDistributorDetail)
                .from(tbDeviceDistributorDetail).where(predicate).fetchResults();

        List<DeviceDistributorChannelDTO> channelDTOS1 =
                queryResults.getResults().stream().map(detail->{
                    DeviceDistributorChannelDTO channelDTO = new DeviceDistributorChannelDTO();
                    BeanUtil.copyProperties(detail,channelDTO);
                    return channelDTO;
                }).collect(Collectors.toList());


        return channelDTOS1;
    }

    /**
     * 重置
     * @param bindId
     */
    @Override
    public void resetChannelList(Long bindId) {
        // set goodsId  device_distributor_binding_detail  where bindId = #{bindId}
        deviceDistributorDetailRepository.updateGoodsInfoByBindId(bindId);
    }
}
